﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CAOS.Entity;
using CAOS.Facade;
using System.Web.Security;

namespace CAOS.Web.Controllers
{
    public class ContaController : BaseController
    {        
        #region Login/Logout

        public ViewResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(Usuario usuario)
        {
            if (string.IsNullOrEmpty(usuario.Login) || string.IsNullOrEmpty(usuario.Senha))
            {
                ViewBag.Mensagem = "Informe o usuário e a senha.";
                return View(usuario);
            }

            usuario = UsuarioFacade.LerUsuario(usuario.Login, usuario.Senha);

            if (usuario == null)
            {
                ViewBag.Mensagem = "Falha na autenticação, verifique os dados informados.";
                return View(usuario);
            }

            var sistemasAdministrados = AcessoFacade.ObterSistemasAdministrados(usuario.Login);

            bool ehAdministradorSistema = sistemasAdministrados != null && sistemasAdministrados.Count > 0;

            if (ehAdministradorSistema)
            {
                FormsAuthentication.SetAuthCookie(usuario.Login, false);

                Configuracao = new Configuracao();
                Configuracao.UsuarioLogado = usuario;

                return RedirectToAction("SelecionarSistema");
            }
            else
            {
                ViewBag.Mensagem = "O usuário Informado não é administrador de nenhum sistema";
            }

            return View(usuario);
        }

        public ActionResult Logout()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Login", "Conta");
        }

        #endregion

        #region SelecionarSistema

        public ViewResult SelecionarSistema()
        {
            ViewBag.SistemaID = this.ObterListaSistemasAdministrados(Configuracao.UsuarioLogado.Login);
            return View();
        }

        [HttpPost]
        public ActionResult SelecionarSistema(string SistemaID)
        {
            if (string.IsNullOrEmpty(SistemaID))
            {
                ViewBag.Mensagem = "Selecione um Sistema.";
                ViewBag.SistemaID = this.ObterListaSistemasAdministrados(Configuracao.UsuarioLogado.Login);
                return View();
            }

            int codigoSistema = Convert.ToInt32(SistemaID);
            Configuracao.Sistema = UnidadeDeTrabalho.SistemaRepository.GetByID(codigoSistema);

            return RedirectToAction("Index", "Home");
        }

        private SelectList ObterListaSistemasAdministrados(string loginUsuario)
        {
            var sistemas = AcessoFacade.ObterSistemasAdministrados(loginUsuario);
            return new SelectList(sistemas, "SistemaID", "Sigla");
        }

        #endregion
    }
}
